<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>

	<body>
	</body>
	<script>
		//未运用策略模式
		function priceCalculate(discountType, price) {
			if(discountType === 'minus100_30') { // 满100减30
				return price - Math.floor(price / 100) * 30
			} else if(discountType === 'minus200_80') { // 满200减80
				return price - Math.floor(price / 200) * 80
			} else if(discountType === 'percent80') { // 8折
				return price * 0.8
			}
		}

		priceCalculate('minus100_30', 270) // 输出: 210
		priceCalculate('percent80', 250) // 输出: 200

		//运用策略模式
		const DiscountMap = {
			minus100_30: function(price) {
				return price - Math.floor(price / 100) * 30
			},
			minus200_80: function(price) {
				return price - Math.floor(price / 200) * 80
			},
			percent80: function(price) {
				return price * 0.8
			}
		}

		/* 计算总售价*/
		function priceCalculate(discountType, price) {
			return DiscountMap[discountType] && DiscountMap[discountType](price)
		}

		priceCalculate('minus100_30', 270)
		priceCalculate('percent80', 250)

		// 输出: 210
		// 输出: 200
		//这样算法的实现和算法的使用就被分开了， 想添加新的算法也变得十分简单：

		DiscountMap.minus150_40 = function(price) {
			return price - Math.floor(price / 150) * 40
		}
	</script>

</html>